package com.yand.data.ch04;


/**
 *  队列数据结构
 *     基于数组
 *      1，核心数组对象
 *
 *      2，长度 队列长度
 *
 *      3，队头
 *
 *      4，队尾
 *
 *      5，有效元素
 *
 *      方法 ： 构造方法  入队   出队   是否为空， 是否满了
 */
public class Queue {
	// 数组
	private long[] arr;

	// 最大空间
	private int maxSize;

	// 有效元素大小
	private int elems;

	// 队头
	private int font;

	// 队尾
	private int end;

	public Queue(int maxSize) {
		this.maxSize = maxSize;
		arr = new long[maxSize];
		elems = 0;
		font = 0;
		end = -1;
	}

	// 插入数据
	public void insert(long value) {
		arr[++end] = value;
		elems++;
	}

	// 移除数据
	public long remove() {
		elems--;
		return arr[font++];
	}

	// 是否为空
	public boolean isEmpty() {
		return (elems == 0);
	}

	// 是否满了
	public boolean isFull() {
		return (end == maxSize - 1);
	}

	// 返回有效元素大小
	public int size() {
		return elems;
	}
}
